package generics.and.colecctions.busqueda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class BusquedaEnArraysColecctionsBinarySearch {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		List<Numeros> lista = new ArrayList<Numeros>();
		lista.add(new Numeros(3));
		lista.add(new Numeros(78));
		lista.add(new Numeros(23));

		// Ordenamos la lista
		Collections.sort(lista, new Comparacion());
		for (Numeros numero : lista) {
			System.out.println(numero.getNumero());
		}

		// Solicita un número y lo busca en la colección ordenada.
		System.out.println("Introduce un número:");
		if (Collections.binarySearch(lista, new Numeros(sc.nextInt()),
				new Comparacion()) >= 0) {
			System.out.println("El número está en la lista");
		} else {
			System.out.println("El número no está en la lista");
		}

		sc.close();
	}

}

class Numeros {
	private int numero;

	public Numeros(int numero) {
		this.numero = numero;
	}

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}
}

class Comparacion implements Comparator<Numeros> {

	@Override
	public int compare(Numeros o1, Numeros o2) {
		if (o1.getNumero() > o2.getNumero()) {
			return 1;
		} else if (o1.getNumero() < o2.getNumero()) {
			return -1;
		} else {
			return 0;
		}

	}

}